/*
 * SendSocketJuzEvent.h
 *
 *  Created on: 2017年6月6日
 *      Author: orange
 */

#ifndef SENDSOCKETJUZEVENT_H_
#define SENDSOCKETJUZEVENT_H_

#include "SocketInfoJuzEvent.h"

class SendSocketJuzEvent;//声明一下

typedef void (*WorkPro)(SendSocketJuzEvent *);
typedef void (*SendFinshPro)(SendSocketJuzEvent*,int);
typedef bool (*RC4_EncryptionPro)(char *key,int nLen,char *src,char *out);

//发送事件交友其他的线程发送管理,并且销毁,请注意　　　不要直接构建对象,要new  不能局部
//不要让 任务线程处理这个
class SendSocketJuzEvent: public SocketInfoJuzEvent {
public:
	WorkPro encryptionPro; //加密函数
	SendFinshPro sendFinshPro;//发送完成函数
	RC4_EncryptionPro RCV_EN;
	char *key;
	char *sendData;//要发送的数据  这个是进过处理的   由setEncryption函数创建由 finsh销毁
	bool isFinsh;
public:
	SendSocketJuzEvent(int nfd,char what,char type,char arg1,char arg2,int nLen,char *pData,const char *evName = mEventName);
	virtual ~SendSocketJuzEvent();

	void setPublicEncryption();//设置公共加密函数
	void setEncryptionPro(WorkPro encryptionPro) ; //设置自定义加密
	void setSendFinshPro(SendFinshPro sendFinshPro); //完成

	void setEncryption();//设置加密

	void setKey(char* key);
	void setRcvEn(RC4_EncryptionPro rcvEn);
	void finsh(int nState = 0);//完成   0 其他原因导致的完成  1 正常的发送完成

	void RC4_En(int nLen,char *src,char *out);

	char* getSendData() const ;
	bool getFinsh();

public:
	static const char* mEventName;
};
#endif /* SENDSOCKETJUZEVENT_H_ */
